import axios from 'axios';

const api = axios.create({
  baseURL: '/api',
  timeout: 300000, // 超时时间300秒（5分钟，深度模式需要更长时间）
  headers: {
    'Content-Type': 'application/json',
  },
});

// 全局中止控制器
let currentAbortController = null;

// 请求拦截器添加token
api.interceptors.request.use(
  (config) => {
    // 优先使用apiKey（普通用户），如果不存在则使用adminToken（管理员）
    const token = localStorage.getItem('apiKey') || localStorage.getItem('adminToken');
    if (token) {
      config.headers.Authorization = `Bearer ${token}`;
    }
    
    // 为每个请求创建新的中止控制器
    currentAbortController = new AbortController();
    config.signal = currentAbortController.signal;
    
    return config;
  },
  (error) => Promise.reject(error)
);

// 响应拦截器处理错误
api.interceptors.response.use(
  (response) => response,
  (error) => {
    if (error.response && error.response.status === 401) {
      // 未授权，清除token并跳转到登录页
      localStorage.removeItem('apiKey');
      window.location.href = '/login';
    }
    return Promise.reject(error);
  }
);

export default {
  // 注册
  register(username, password, email = null) {
    return api.post('/register', { username, password, email });
  },
  
  // 登录
  login(username, password) {
    return api.post('/login', { username, password });
  },
  
  // 发送聊天消息
  chat(sessionId, userInput, mode = 'shallow') {
    return api.post('/chat', { session_id: sessionId, user_input: userInput, mode });
  },
  
  // 中止当前请求
  abort() {
    if (currentAbortController) {
      currentAbortController.abort();
      currentAbortController = null;
    }
  },

  // 携带文件的聊天
  chatWithFile(sessionId, userInput, file, mode = 'shallow') {
    const form = new FormData();
    form.append('session_id', sessionId || 'default_session');
    form.append('user_input', userInput || '');
    form.append('mode', mode);
    if (file) {
      form.append('attachment', file);
    }
    return api.post('/chat_with_file', form, {
      headers: { 'Content-Type': 'multipart/form-data' }
    });
  },
  
  // 获取历史记录
  getHistory(sessionId) {
    return api.get('/history', { params: { session_id: sessionId } });
  },
  
  // 清空历史记录
  clearHistory(sessionId) {
    return api.delete('/history', { params: { session_id: sessionId } });
  },
  
  // 删除会话（完全删除）
  deleteSession(sessionId) {
    return api.delete('/session', { params: { session_id: sessionId } });
  },
  
  // 上传日志文件
  uploadLogFile(file) {
    const form = new FormData();
    form.append('file', file);
    return api.post('/upload_log', form, {
      headers: { 'Content-Type': 'multipart/form-data' }
    });
  },
  
  // 重新生成最后一次AI回复
  regenerate(sessionId, mode = 'shallow') {
    return api.post('/regenerate', { session_id: sessionId, mode });
  },

  // ==================== 管理员API接口 ====================
  
  // 获取用户列表
  getUsers(page = 1, pageSize = 20) {
    return api.get('/admin/users', { 
      params: { page, page_size: pageSize } 
    });
  },
  
  // 获取用户详情
  getUserDetail(userId) {
    return api.get(`/admin/users/${userId}`);
  },
  
  // 更新用户信息
  updateUser(userId, userData) {
    return api.put(`/admin/users/${userId}`, userData);
  },
  
  // 删除用户
  deleteUser(userId) {
    return api.delete(`/admin/users/${userId}`);
  },
  
  // 获取对话历史
  getChatHistory(filters = {}) {
    return api.get('/admin/chat-history', { params: filters });
  },
  
  // 获取数据分析统计
  getAnalytics() {
    return api.get('/admin/analytics');
  },
  
  // 提交反馈（问题是否解决）
  submitFeedback(sessionId, isResolved) {
    return api.post('/feedback', {
      session_id: sessionId,
      is_resolved: isResolved
    });
  },
  
  // 获取会话列表（包含会话名称）
  getSessions() {
    return api.get('/sessions');
  }
};
